//算法6.1 邻接矩阵存储
#ifndef MGRAPH_H_
#define MGRAPH_H_

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

#define Status int
#define OK 1
#define ERROR 0
#define OVERFLOW -1

//图的邻接矩阵储存结构
#define INFINITY INT_MAX  //定义最大值
#define MAX_V 20          //最大顶点数目

#define eleType char
#define GraphKind int
#define UndiGraph 1
#define DiGraph   2
#define IndirectedNet 3
#define DirectedNet 4

typedef struct{
    int code;  //顶点编号
    eleType info; //顶点其他信息
}VertexType;//顶点类型定义

typedef struct{
    int arcs[MAX_V][MAX_V]; //邻接矩阵
    int vexnum,arcnum;  //图包含的顶点与边数
    VertexType vexs[MAX_V];  //存放顶点信息
    GraphKind type;//图的种类标志，分为无向图、有向图、无向网、有向网(1、2、3、4)
}MGraph;

//基于邻接矩阵表示法的无向图创建
Status CreateGraph(MGraph &G)
{
    G.type=UndiGraph;
    int i,j,k;
    scanf("%d %d",&G.vexnum,&G.arcnum);//输入图的基本信息，包括顶点与边的数目
    for( i=0;i<G.vexnum;i++)
    {
        scanf("%d %c",&G.vexs[i].code,&G.vexs[i].info);//输入顶点信息
    }

    for( i=0;i<G.vexnum;i++)
    {
        for( j=0;j<G.vexnum;j++)
        {
            G.arcs[i][j]=0;//邻接表初始化，将所有元素初始化为0;
                           //如果是网，则初始化为极大值
        }
    }

    for(k=0;k<G.arcnum;k++)
    {
        scanf("%d %d",&i,&j);
        G.arcs[i][j]=1;
        G.arcs[j][i]=1;
    }

    return OK;
}

#endif